/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import java.util.Date;
import java.sql.Statement;
import java.sql.ResultSet;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 *
 * @author dymanik
 */
public class Estadistica_DAO {

    public static JSONObject consultarEstadisticaRep(Date fecha_inicial, Date fecha_final, String[] esp, String personalDsi, String sede, String espacio) {
        ConexionBD conex = new ConexionBD();
        Statement s = null;
        JSONObject Estadisticas = new JSONObject();
        try {
            Statement st = (Statement) conex.session.createStatement();
            String querygen;
            ResultSet rs;

            String query = "SELECT r.id_reporte_novedad, r.agrega, "
                    + "to_char(r.fecha_suceso, 'dd-mm-yyyy'), to_char(r.fecha_reporte, 'dd-mm-yyyy'), "
                    + "to_char(r.tiempo, 'hh:mm am'), r.via, r.descripcion, "
                    + "r.id_novedad_generica, r.id_novedad_especifica, "
                    + "cu.apellido_1, cu.nombre_1, ng.nombre_novedad_gen, ne.nombre_novedad_esp, "
                    + "u.nombre_espacio, u.nombre_sede ";
            String from = "FROM (((reporte_novedad r join novedad_especifica ne on (r.id_novedad_especifica=ne.id_novedad_esp)) "
                    + "join novedad_generica ng on (r.id_novedad_generica=ng.id_novedad_gen)) join "
                    + "comunidad_universitaria cu on (cu.ci=r.agrega)) join ubicacion_novedad u on "
                    + "(r.id_reporte_novedad=u.id_reporte_novedad) ";
            String param = "WHERE (1=1) ";
            if (esp != null) {
                param += "and ((r.id_novedad_especifica = " + esp[0] + ") ";
                for (int k = 1; k < esp.length; k++) {
                    param += "or (r.id_novedad_especifica = " + esp[k] + ") ";
                }
                param += ") ";
            }
            if (fecha_inicial != null) {
                param += "and  (r.fecha_suceso >= '" + fecha_inicial + "') ";
            }
            if (fecha_final != null) {
                param += "and  (r.fecha_suceso <= '" + fecha_final + "') ";
            }
            if (personalDsi != null && !personalDsi.equals("")) {
                param += "and  (r.agrega = '" + personalDsi + "') ";
            }
            if (sede != null && !sede.equals("")) {
                param += "and  (u.nombre_sede = '" + sede + "') ";
            }
            if (espacio != null && !espacio.equals("")) {
                param += "and  (u.nombre_espacio = '" + espacio + "') ";
            }
            param += " order by r.id_novedad_generica, r.id_novedad_especifica, r.fecha_suceso ";
            System.out.println("\n" + query + from + param);
            rs = st.executeQuery(query + from + param);
            int i = 0;
            JSONArray ja = new JSONArray();
            while (rs.next()) {
                JSONObject Estadistica = new JSONObject();
                Estadistica.put("idReporte", rs.getString(1));
                Estadistica.put("ciAgrega", rs.getString(2));
                Estadistica.put("fechaSuceso", rs.getString(3));
                Estadistica.put("fechaReporte", rs.getString(4));
                Estadistica.put("hora", rs.getString(5));
                Estadistica.put("via", rs.getString(6));
                Estadistica.put("descripcion", rs.getString(7));
                Estadistica.put("idGenerica", rs.getString(8));
                Estadistica.put("idEspecifica", rs.getString(9));
                Estadistica.put("agrega", rs.getString(10) + ", " + rs.getString(11));
                Estadistica.put("nombreGenerica", rs.getString(12));
                Estadistica.put("nombreEspecifica", rs.getString(13));
                Estadistica.put("espacio", rs.getString(14));
                Estadistica.put("sede", rs.getString(15));

                query = "select i.ci, cu.nombre_1, cu.apellido_1, i.tipo_implicado "
                        + "from implicado i join comunidad_universitaria cu on "
                        + "(i.ci=cu.ci) where (i.id_reporte_novedad='" + rs.getString(1) + "')"
                        + " order by i.tipo_implicado";
                System.out.println(query);
                Statement st2 = (Statement) conex.session.createStatement();
                ResultSet rs2 = st2.executeQuery(query);
                JSONArray implicados = new JSONArray();
                int j = 0;
                while (rs2.next()) {
                    JSONObject implicado = new JSONObject();
                    implicado.put("ci", rs2.getString(1));
                    implicado.put("nombre", rs2.getString(3)+", "+rs2.getString(2));
                    implicado.put("tipo", rs2.getString(4));
                    implicados.put(j++, implicado);
                }

                Estadistica.put("implicados", implicados);
                ja.put(i++, Estadistica);
            }
            rs.close();
            Estadisticas.put("Estadisticas", ja);
        } catch (Exception e) {
            System.out.println("Error consultando estadisticas. " + e.getMessage());
        } finally {
            if (conex != null) {
                conex.cerrarConexion();
            }
        }
        return Estadisticas;

    }

    /*public static JSONArray consultarEstadisticaRep(Date fecha_inicial,Date fecha_final, String[] gen, String[] esp) {
    ConexionBD conexion = new ConexionBD();
    String querygen = "Select id_novedad_gen,nombre_novedad_gen, count(*) from reporte_novedad as rep, novedad_generica as gen where rep.id_novedad_generica=gen.id_novedad_gen";
    String where = "";
    Statement s = null;
    Statement s2 = null;
    ResultSet rsgen = null;


    try {
    s = conexion.session.createStatement();
    s2 = conexion.session.createStatement();
    } catch (SQLException se) {
    System.out.println("Error Consultando las Estadisticas!");
    return null;
    }


    if (fecha_inicial != null && !fecha_inicial.equals("")) {
    where += " and fecha_suceso >= '" + fecha_inicial+"' ";
    }
    if (fecha_final  != null && !fecha_final.equals("")) {
    where += " and fecha_suceso <= '" + fecha_final +"' ";
    }
    querygen += where+" group by nombre_novedad_gen,id_novedad_gen;";
    System.out.println(querygen);
    try {
    rsgen = s.executeQuery(querygen);
    JSONArray estadisticas = new JSONArray();
    try {
    int i = 0;
    while (rsgen.next()) {
    JSONObject countgen = new JSONObject();
    JSONObject countesp = new JSONObject();
    countgen.put("novedad", rsgen.getString(2));
    countgen.put("cantidad", rsgen.getString(3));
    countgen.put("ident", 0);
    estadisticas.put(i++, countgen);

    ResultSet rsesp=null;
    String queryesp = "Select nombre_novedad_esp, count(*) from reporte_novedad as rep, novedad_especifica as esp where rep.id_novedad_especifica=esp.id_novedad_esp";
    queryesp += where + " and id_novedad_generica= '"+rsgen.getString(1)+"' group by nombre_novedad_esp";
    System.out.println("esp::"+queryesp);

    rsesp = s2.executeQuery(queryesp);
    System.out.println(queryesp);
    while(rsesp.next()){
    countesp.put("novedad", rsesp.getString(1));
    countesp.put("cantidad", rsesp.getString(2));
    countesp.put("ident", 1);
    estadisticas.put(i++, countesp);
    }
    }
    System.out.println("\n---\n---\n---\n---\n--- INSPECCIONES = "+estadisticas+" \n---\n---\n---");
    } catch (Exception e) {
    }
    return estadisticas;
    } catch (SQLException se) {
    se.printStackTrace();
    System.out.println("Error Consultado las inspecciones");
    return null;
    }

    }*/
}
